<%@page import="java.util.concurrent.ConcurrentHashMap"%>
<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
</head>
<body>

<%--1.创建一个变量
    var：定义变量名  value: 给变量的赋值   scope: 存在哪个作用域上 page当前页面pageContext
--%>
<c:set var="i" value="10" scope="page"></c:set>
<%--2.输出变量
--%>
<c:out value="${i}"></c:out>
${i}

<%--3.如果test为假就不执行 --%>
<c:if test="${ pageScope.i != 10 }">
    != 10
</c:if>

<%--4.多分枝语句--%>
<c:choose>
    <c:when test="${i < 10}">
        a
    </c:when>
    <c:when test="${i > 10 }">
        b
    </c:when>
    <c:otherwise>
        c
    </c:otherwise>
</c:choose>


<c:catch var="e">
    <!-- 一旦catch中的代码出现异常，则e变量就被初始化了 -->
    ${ 1 / 0 }
</c:catch>

<c:if test="${e != null}">
    <!-- e.getMessage() -->
    ${e.message }
</c:if>

<!-- jstl在pageContext中添加属性array -->
<c:set var="array" value="a,2,3,4,5,sss" scope="page"></c:set>

<c:forEach items="${array}" var="a" varStatus="b">
    ${b.index} : ${a}   <br/>
</c:forEach>

<hr/>
<%
    int[] arr = {1,2,3};
    pageContext.setAttribute("arr", arr);
    //Arrays.asList创建的集合的长度是不能发生改变的，因为此集合是从数组变得
    List<String> list = Arrays.asList("a1","b2","c3","d4");
    request.setAttribute("names", list);
    //set，不可以使用下标来访问的
    Set<Double> set = new HashSet<>();
    set.add(1.1);
    set.add(2.1);
    set.add(3.1);
    session.setAttribute("scores", set);
    //Map无序，不可以使用下标，但是可以根据key获取
    Map<String,String> map = new ConcurrentHashMap<>();
    map.put("one","a");
    map.put("two","b");
    map.put("three","c");
    application.setAttribute("maps", map);
%>

<!-- varStatus用来保存变量状态的变量  .index获取当前变量的下标 -->
<c:forEach items="${arr}" var="num" varStatus="varStatus">
    ${ varStatus.index } : ${ num }  <br/>
</c:forEach>

<c:forEach items="${names}" var="name" varStatus="varStatus">
    ${ varStatus.index } : ${ name } <br/>
</c:forEach>

<c:forEach items="${scores}" var="score">
    ${ score } <br/>
</c:forEach>

<!-- forEach只管遍历 -->
<c:forEach items="${maps}" var="map">
    ${ map.key } : ${map.value } <br/>
</c:forEach>

<!-- 切分后遍历 -->
<c:forTokens items="123-456-789" delims="-" var="n">
    ${n}
</c:forTokens>

</body>
</html>
